package com.hospital.register.order.service;

import com.hospital.register.model.order.RefundInfo;

import java.util.Date;

/**
 * 处理退款相关业务
 *
 * @author 刘逸晖
 */
public interface RefundInfoService {

    /**
     * 新增退款信息
     *
     * @param 预新增的退款信息
     * @return 是否新增成功
     */
    boolean insert(RefundInfo refundInfo);

    /**
     * 根据订单信息生成退款信息。如果对应支付方式的退款信息不存在才新增
     *
     * @param orderId     订单的 id
     * @param paymentType 支付类型
     * @return 退款信息
     * 如果有新增，则返回新的，如果该订单已存在指定支付方式的记录，就返回旧的
     */
    RefundInfo generateIfAbsent(Long orderId, Byte paymentType);

    /**
     * 根据订单 id 、支付类型、退款状态查询退款信息
     *
     * @param orderId      所属订单的 id
     * @param paymentType  支付类型（微信、支付宝等）
     * @param refundStatus 退款状态，可以为空
     * @return 退款信息
     */
    RefundInfo selectByConditions(Long orderId, Byte paymentType, Byte refundStatus);

    /**
     * 根据 id 更新退款信息
     * id 、订单 id 、创建时间、删除标记 不可更新
     *
     * @param refundInfo 待更新的退款信息
     * @return 是否更新成功
     */
    boolean updateById(RefundInfo refundInfo);

    /**
     * 根据 id 删除退款信息
     * 逻辑删除
     *
     * @param id           待删除的 id
     * @param deletionTime 删除时间
     * @return 是否删除成功
     */
    boolean deleteById(Long id, Date deletionTime);

}
